[참조]
NumPy는 과학 컴퓨팅을 위한 기본 패키지이다.
다차원 배열 외에도 이산 푸리에 변환, 선형대수, 통계, 난수(random number) 등 다양한 기능을 가지고 있다.
Ex)
import numpy as np
np.savetxt(fname, X, delimiter=' ', ...)
# np.savetxt()로 텍스트파일로 저장한다.
# 디폴트 구분자(delimiter)로 스페이스를 사용한다. 콤마를 사용하려면 delimiter=','로 지정한다.
X = np.loadtxt(fname, delimiter=' ', skiprows=0, comments='#', ...)
# np.loadtxt()로 텍스트파일을 읽는다.
# 빌트인 패키지인 csv와 달리 헤더(header)를 읽지 못한다.
# np.loadtxt()가 skiprows(처음 몇개의 열을 무시할 건지)와 comment 문자를 지정한다.
(Note) np.savetxt()와 np.loadtxt()는 각각 출력과 입력을 나타내는 np 함수이다.
Q) 양수는 blank로, 음수는 -로 float를 출력하려면?
A) % + blank + .7e
코드) np.savetxt('resp.dat', resp, fmt='% .7e', delimiter=' ', newline='\n')
결과) 2.4000000e-01 8.8196305e-04 8.1919938e-03 -4.1484255e-03
Ex)
import numpy as np
X = np.arange(4).reshape(2,2)
np.savetxt('2x2.txt',X)
Y = np.loadtxt('2x2.txt')
Ex-결과)
"2x2.txt" 파일에 저장된 결과는 다음과 같다.
0.000000000000000000e+00 1.000000000000000000e+00
2.000000000000000000e+00 3.000000000000000000e+00
1차원 배열(즉, 벡터)은 n*1 형태로 저장된다
파일에서 n*1이나 1*n은 모두 1차원 벡터로 읽힌다.
Ex)
import numpy as np
X1 = np.array([0,1])
np.savetxt('X1.txt',X1)
X2 = np.array([0,1]).reshape(1,2)
np.savetxt('X2.txt',X2)
X3 = np.array([0,1]).reshape(2,1)
np.savetxt('X3.txt',X3)
Y1 = np.loadtxt('X1.txt') # array( [0., 1.])
Y2 = np.loadtxt('X2.txt') # array( [0., 1.])
Y3 = np.loadtxt('X3.txt') # array( [0., 1.])
Ex-결과)
"X1.txt" 파일
0.000000000000000000e+00
1.000000000000000000e+00
"X2.txt" 파일
0.000000000000000000e+00 1.000000000000000000e+00
"X3.txt" 파일
0.000000000000000000e+00
1.000000000000000000e+00
Ex)
import numpy as np
A1 = np.array([0,1])
A1.tofile('A.dat') # A1을 (이진수 형태로) 저장
A2 = np.fromfile('A.dat', dtype=int) # 저장했던 (이진수 형태의) A를 A2로 불러들임
A1 == A2 # array( [True,True] )
save(file,arr,...): arr을 .npy 포맷으로 file에 씀
savez(file,*args,**kwds): args와 kwgs에 주어진 여러 배열을 .npz 포뱃으로 file 에 씀.
**kwds로 저장할 때 주어진 키워드가 사용되고, args로 저장하는 경우 arr_0, arr_1, 등을 키워드를 사용한 것과 같음
Ex)
import numpy as np
acc = np.random.random(1024) # 1024 points in [0,1.0)
dt = 60.0
station = 3
np.savez('acc.npz',acc=acc,dt=dt,station=station) # acc,dt,station를 인자로 acc.npz에 저장
data = np.load('acc.npz') # acc,dt,station인 세 인자로 저장된 acc.npz를 data로 불러 들임
data["acc"] # array( [0.74681048, ..., 0.62417015] )
data["dt"] # array(60.)
data["station"] # array(3)
Ex)
import numpy as np
Xi = np.array([0,1],dtype=np.int16) # 배열의 dtype을 정수형(np.int32)으로 지정
Xf = np.array([0,1],dtype=np.float64) # 배열의 dtype을 정수형(np.float64)으로 지정
Ex) 일반 문자열(str) vs 바이트(bytes) 문자열
import numpy as np
dtype = [('name','S10'),('age','
X = np.array([('Alice',19,173.),('Bob',20,'181.')],dtype=dtype)
X = np.array([('Alice',19,173.),('Bob',20,'181.')],dtype=dtype)
# b'Alice'처럼 ' '(작은따옴표)나 " "(큰따옴표) 앞에 b를 붙이면 바이트(bytes) 문자열이 된다.
# 'Alice'는 일반 문자열(str)이고, b'Alice'는 바이트 문자열이다.')]
X['name'] # array( [b'Alice', b'Bob'], dtype='|S10' )
X['age'] # array( [19, 20] )
X['height'] # array( [173., 181.], dtype=float32 )
X[0] # (b'Alice', 19, 173.)
Ex)
import numpy as np
dtype = [('name','S10'),('age','int32'),('weight','float64')] # 위 예와 동일
Ex) 여러 개의 리스트 데이터를 구조체 배열로 저장
import numpy as np
name = ['Alice', 'Bob', 'Doug']
age = [25, 45, 37]
height = [173.,181.,165.]
dtype = [('name','S10'),('age','
X = np.zeros(3,dtype=dtype)
X['name'] = name
X['age'] = age
X['height'] = height
Ex) nan (not a number)
import numpy as np
import matplotlib.pyplot as plt
x = [1,2,3,4]
y1 = [4,7,8,9]
y2 = [2,3,1,np.nan]
# 그림을 그릴 때 nan이 있으면 그 포인트는 그리지 않는다.
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
Ex) inf (infinite)
import numpy as np
data = [0,1,2,3]
maximum = -np.inf # maximum: -inf
for x in data:
if x > maximum:
maximum = x # maximum: 3